home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / vlapak1.zip / VLAMODEX.ZIP / TEST.ASM < prev    next >
Assembly Source File  |  1993-05-10  |  4KB  |  221 lines

  1.     DOSSEG
  2.     .MODEL SMALL
  3.     .STACK 200h
  4.     .CODE
  5.     .386
  6.     ASSUME CS:@CODE, DS:@CODE
  7.     Locals
  8.     Ideal
  9. ────────────────────────────────────────────────────────────────────────────
  10. CsSeg       dw  ?
  11.  
  12. ScreenWidth =   400
  13.  
  14. INCLUDE "Modex.inc"
  15.  
  16. VLAsig      db  "oooooooooooooooooo",1
  17.             db  "o                o",1
  18.             db  "o x   x x    xx  o",1
  19.             db  "o x   x x   x  x o",1
  20.             db  "o  x x  x   xxxx o",1
  21.             db  "o  x x  x   x  x o",1
  22.             db  "o   x   xxx x  x o",1
  23.             db  "o                o",1
  24.             db  "oooooooooooooooooo",0
  25.  
  26. Roff        dw  0
  27. Boff        dw  0
  28. Goff        dw  0
  29. Rvel        =   6
  30. Bvel        =   3
  31. Gvel        =   -3
  32.  
  33. INCLUDE "DaPal.DB"
  34. ────────────────────────────────────────────────────────────────────────────
  35.     ;can you guess what this does?
  36. PROC WriteSig
  37.     push    es ds
  38.     pusha
  39.     
  40.     mov     ah,1111b    ;latch in all 4 planes
  41.     @Set_Write_Plane
  42.  
  43.     mov     ds,[cs:CSseg]
  44.     mov     es,[VGAseg]
  45.  
  46.     mov     bp,30
  47.     imul    bp,ScreenWidth/4
  48.     add     bp,10
  49.     mov     si,offset VLAsig
  50.     mov     di,bp
  51. @@DaLoop:
  52.     mov     cl,[si]
  53.     inc     si
  54.     or      cl,cl
  55.     je      @@AllDone
  56.     dec     cl
  57.     je      @@NextLine
  58.     sub     cl," "-1
  59.  
  60.     mov     [es:di],cl
  61.     mov     [es:di + ScreenWidth/4 * 2],cl
  62.     mov     [es:di + ScreenWidth/4],cl
  63.     mov     [es:di + ScreenWidth/4 * 3],cl
  64.     inc     di
  65.     jmp     @@DaLoop
  66. @@NextLine:
  67.     add     bp,ScreenWidth/4 * 4
  68.     mov     di,bp
  69.     jmp     @@DaLoop
  70.  
  71. @@AllDone:
  72.     popa
  73.     pop     ds es
  74.     ret
  75. ENDP WriteSig
  76.  
  77.     ;fills the screen w/ the palette
  78. PROC WriteJunk
  79.     push    es ds
  80.     pusha
  81.  
  82.     mov     es,[cs:VGASeg]
  83.     mov     di,0
  84.     mov     cx,80
  85.     mov     ax,2
  86.     cld
  87.     mov     bp,ScreenWidth
  88.     shr     bp,2
  89. @@Fw:
  90.     mov     cx,bp
  91.     push    ax
  92.  
  93. @@fff:
  94.     stosb
  95.     inc     al
  96.     dec     cx
  97.     jne     @@fff
  98.  
  99.     pop     ax
  100.     inc     ax
  101.     cmp     ax,480
  102.     jb      @@Fw
  103.  
  104.     popa
  105.     pop     ds es
  106.     ret
  107. ENDP WriteJunk
  108.  
  109. PROC WierdPal
  110.     push    ds
  111.     pusha 
  112.  
  113.     mov     ds,[cs:CSseg]
  114.     mov     dx,3c8h
  115.     xor     al,al
  116.     out     dx,al
  117.     inc     dx
  118.  
  119.     mov     si,[Roff]
  120.     mov     di,[Goff]
  121.     mov     bx,[Boff]
  122.     mov     cx,256
  123. @@DaLoop:
  124.     mov     al,[Palette + si]
  125.     out     dx,al
  126.     mov     al,[Palette + di+1]
  127.     out     dx,al
  128.     mov     al,[Palette + bx+2]
  129.     out     dx,al
  130.     add     si,3
  131.     add     di,3
  132.     add     bx,3
  133.     dec     cx
  134.     jne     @@DaLoop
  135.  
  136.     add     [Roff],Rvel
  137.     cmp     [Roff],768
  138.     jl      @@Rok
  139.     sub     [Roff],768
  140. @@Rok:
  141.     cmp     [Roff],0
  142.     jge     @@Rok2
  143.     add     [Roff],768
  144. @@Rok2:
  145.  
  146.     add     [Boff],Bvel
  147.     cmp     [Boff],768
  148.     jl      @@Bok
  149.     sub     [Boff],768
  150. @@Bok:
  151.     cmp     [Boff],0
  152.     jge     @@Bok2
  153.     add     [Boff],768
  154. @@Bok2:
  155.  
  156.     add     [Goff],Gvel
  157.     cmp     [Goff],768
  158.     jl      @@Gok
  159.     sub     [Goff],768
  160. @@Gok:
  161.     cmp     [Goff],0
  162.     jge     @@Gok2
  163.     add     [Goff],768
  164. @@Gok2:
  165.  
  166.     popa
  167.     pop     ds
  168.     ret
  169. ENDP
  170.  
  171. ────────────────────────────────────────────────────────────────────────────
  172. START:
  173.     mov     [cs:CsSeg],cs
  174.     mov     ds,[cs:CsSeg]
  175.     
  176.     @SetModeX m256x240x256,ScreenWidth;m360x480x256,ScreenWidth
  177.  
  178.     mov     cx,256
  179.     mov     ah,0
  180.     mov     si,offset Palette
  181.     @WritePalette
  182.  
  183.     mov     ah,1111b    ;latch in all 4 planes
  184.     @Set_Write_Plane
  185.  
  186.     call    WriteJunk
  187.     call    WriteSig
  188.  
  189.     mov     bx,0
  190.     mov     bp,1
  191. @@ScanLoop:
  192.     @FullVertWait
  193.     @Set_Split
  194.     @Set_Start_Offset
  195.     call    WierdPal
  196.  
  197.     mov     ah,1
  198.     int     16h
  199.     jnz     KeyPress
  200.  
  201.     add     bx,bp
  202.     cmp     bx,[ModeXScanLines]
  203.     jle     @@NotOver480
  204.     neg     bp
  205.     mov     bx,[ModeXScanLines]
  206. @@NotOver480:
  207.     cmp     bx,1
  208.     jge     @@ScanLoop
  209.     neg     bp
  210.     mov     bx,1
  211.     jmp     @@ScanLoop
  212.  
  213. KeyPress:
  214.     mov     ah,0
  215.     int     16h         ;get or wait for keypress 
  216.     mov     ax,3        
  217.     int     10h         ;set 80x25x16 text mode
  218.     mov     ax,4c00h
  219.     int     21h         ;return control to DOS
  220. END START
  221.